﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Text.RegularExpressions;
using System.Threading.Tasks;

namespace LunarSF.SHomeWorkshop.LunarMarkdownEditor
{

    /// <summary>
    /// 一个 Markdown 中的某一个具体的“锚”片段。
    /// </summary>
    public class Anchor
    {
        public Anchor(AnchorWrap wrap, string text)
        {
            this.wrap = wrap;
            this.text = text;
        }

        /// <summary>
        /// 这个属性应由 AnchorManager 计算并提供。
        /// </summary>
        public string AutoNumberText { get; set; } = "";

        /// <summary>
        /// 这个属性也应由 AnchorManager 计算并提供。
        /// </summary>
        public int AutoNumber { get; set; } = -1;

        public bool IsAutoNumber
        {
            get
            {
                var reg = new Regex(@"^\[[ 　\t]*\^[ 　\t]*\]");
                var match = reg.Match(this.text);
                return (match != null && match.Success);
            }
        }

        private AnchorWrap wrap;
        /// <summary>
        /// 一个 Markdown 文件条目对应一个 AnchorWrap 对象。
        /// </summary>
        public AnchorWrap Wrap
        {
            get { return wrap; }
        }

        /// <summary>
        /// 即父 ParentWrap.TailPath。
        /// </summary>
        public string TailPath
        {
            get { return wrap == null ? "" : wrap.TailPath; }
        }

        private string text = "";

        public string Text
        {
            get { return text; }
        }

        /// <summary>
        /// 锚文本形如：[字面值 01](@锚ID 字面值 02)
        /// 此属性返回其中的：“锚ID”
        /// </summary>
        public string ID
        {
            get
            {
                var reg = new Regex(@"(?<=(\(@))[^ 　\t]*(?=[ 　\t\)])");
                var match = reg.Match(text);

                return (match != null && match.Success) ? match.Value : "";
            }
        }

        /// <summary>
        /// 锚文本形如：[字面值 01](@锚ID 字面值 02)
        /// 此属性返回其中的：“字面值 01”
        /// </summary>
        public string Word1
        {
            get
            {
                if (IsAutoNumber)
                {
                    return $"[{AutoNumber}]";
                }

                var reg = new Regex(@"(?<=\[).*(?=\])");
                var match = reg.Match(text);

                return (match != null && match.Success) ? match.Value : "";
            }
        }

        /// <summary>
        /// 锚文本形如：[字面值 01](@锚ID 字面值 02)
        /// 此属性返回其中的：“字面值 02”
        /// </summary>
        public string Word2
        {
            get
            {
                var reg = new Regex(@"(?<=(\(@.*[ 　\t]{1,})).*(?=\))");
                var match = reg.Match(text);

                var result = (match != null && match.Success) ? match.Value : "";

                if (string.IsNullOrWhiteSpace(result.Trim(new char[] { '\"', ' ', '　', '\t' })))
                    return "";

                if (result.Length >= 3 && result.StartsWith("\"") && result.EndsWith("\""))
                    result = result.Substring(1, result.Length - 2);

                return result;
            }
        }
    }
}
